交替方向乘子法(ADMM)算法原理详解
ADMM是个啥?
更新 : ; 更新 : ; 更新 : ;
相关发展脉络
1.1 对偶问题(Dual Problem)
▲ Tibshrani课件上的一个二元优化问题的例子。把原问题目标函数曲面和对偶问题目标函数曲面画在了一张图里~ (不过要注意看坐标第一维和第二维坐标的定义(x1/u1, x2/u2)。本来原目标函数和对偶问题目标函数的自变量是不同的,但这图换了坐标之后把它两叠在了一起)
更新 :; 更新 : ;
其实这个对偶分解更像是对偶梯度下降里头一个计算上的 trick~ 因为优化分量往往比优化一个合起来的目标函数简单。ADMM 之所以好用,很大一个原因也是因为这个。
当然,ADMM 算法和“对偶梯度下降+对偶分解”这个解法还是有差别的。我们还差最后一小块砖:增广拉格朗日方法~
1.4 增广拉格朗日方法(Augmented Lagrangian Method)
我们对它做一步增广,变成:
写出它的拉格朗日函数(增广拉格朗日函数):
那么根据对偶梯度下降的算啊发,这个优化问题的迭代步骤包括:
更新 :; 更新 : ;
这儿还有一个细节,第二步梯度下降的学习率直接取了 ,这个选择有助于更好地收敛~
考虑增广前的优化问题,假设它的解是 。那么我们有 primal feasibility 和 dual feasibility 两点要求:
Primal feasibility:
而在第 k 步迭代的时候,由于
我们有:
(上面第三个等式把第二步更新后的 的表达式带入进去了)
这个式子说明:每一步迭代之后,我们得到的 都满足原优化问题的 dual feasibility。!这个性质保证了,我们只需要关注 primal feasibility,当 primal feasibility 也得到满足的话,迭代的结果就是最优值。这一定程度上也加快了算法收敛速度。
然而这么做的代价是:增广后的目标函数和拉格朗日函数不再是可分离的,所以我们不能像前面对偶分解那样简便地做计算。比如,假如我们的目标函数可以写成:
那增广后变成:
那如果我们还是想拆,这个问题怎么解决呢?ADMM 算法来了!
1.5 ADMM(Alternating Direction Method of Multipliers)算法
这边把文章最前面写的 ADMM 部分的介绍再搬运一遍下来(人类的本质是复读机......hhhh)
ADMM 用于求解如下最优化问题:
写出该优化问题的增广拉格朗日函数式子:
其中 为拉格朗日乘子(向量)。
接着使用如下更新步骤进行迭代(第 步更新)直至收敛:
更新 : ; 更新 : ; 更新 : ;
这个算法在一定条件下是可以证明收敛的。可以看 Boyd 的 ADMM 小册子或者看这儿 ADMM 算法的详细推导过程是什么?- 覃含章的回答~
至此,ADMM 算法就算是介绍得差不多了~
算法有关细节
2.1 Scaled Form——表示形式更简单的ADMM算法等价写法
我们刚刚介绍过,标准的 ADMM 算法里头对应的增广拉格朗日函数是如下式子~ 后续对 和 都是基于这个式子。
我们定义 ,则上述式子可以化简为如下更简单的式子:
这个式子本质上就是把一次项的部分凑到前面的二次项里面,使得整个拉格朗日函数形式更加简单,写程序推公式的时候更方便一些。 是与 无关的量(对参数更新没有帮助)。
这个时候拉格朗日函数的更新步骤需要相应地变更为:
更新 : ; 更新 : ; 更新 : ;
2.2 终止条件
是原优化和对偶问题的解的两个条件是:
Primal feasibility: ; Dual feasibility:, ;
(此处省略相关证明,直接给最终使用的时候的条件)
我们定义:
Primal residual: ; Dual residual: ;
关于 和 的选取,Boyd 给出了如下建议值,该值由绝对部分和相对部分构成,具体而言:
( 是线性约束的个数,也就是 , )( 是 的维数, )
ADMM为什么强大——举个简单例子(Lasso)
高维统计里面往往需要求解 “loss+penalty”形式的优化问题,其中 loss 部分往往是可导的;而 penalty 部分往往是不可导的(比如 惩戒)。这个时候没法使用普通的梯度下降法、牛顿法是没法求解的。这个时候就需要使用其他的优化算法求解,比如:近端梯度下降(proximal gradient descent),坐标下降法(Coordinate Descent)等等。ADMM 也是里面很常用的方法。
这里我们以最简单的 Lasso 线性回归模型为例做一个简单介绍~
假设自变量矩阵 ,因变量 ,系数向量 。此时 Lasso 需要求解如下优化问题:
这个优化问题可以等价为:
则 ADMM 的优化步骤包括:
更新 : 更新 : 更新 :
这其中,第 1 步为二次优化问题,有显示解(凑平方或者求导都行);第 2 步也有显示解,其中函数
为 soft-thresholding 函数(若 为向量,则表示 element wise 地做这个计算)~这儿三个子迭代步骤都有显示解,因此计算上效率还是相对比较高的~更多阅读
#投 稿 通 道#
让你的文字被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析、科研心得或竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。
📝 稿件基本要求:
• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注
• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题
• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算
📬 投稿通道:
• 投稿邮箱:hr@paperweekly.site
• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者
• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿
△长按添加PaperWeekly小编
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧